﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using LogicaNegocio;
using Entities;


namespace Presentacion
{
    public partial class ABMProductos : System.Web.UI.Page
    {
        private GestorMarcas gMarcas;
        private GestorCategorias gCategorias;
        private GestorUnidadesMedida gUnidades;
        private static string op;

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                cargarComboCategorias();
                cargarComboMarcas();
                cargarComboUnidadesMedida();
                op = Request.QueryString["op"].ToString();
                presentarForm(op);

            }
        }

        private void presentarForm(string opcForm)
        {
            switch (opcForm)
            {
                case "nuevo":
                    this.Page.Title = "Alta de Productos";
                    txtNombre.Enabled = true;
                    ddlCategoria.Enabled = true;
                    ddlMarca.Enabled = true;
                    txtPrecioUnitario.Enabled = true;
                    txtStock.Enabled = true;
                    txtTamaño.Enabled = true;
                    ddlUnidadMedida.Enabled = true;
                    calendarFechaIngreso.Enabled = true;
                    break;
                case "modif":
                    this.Page.Title = "Modificacion de Productos";
                    calendarFechaIngreso.Enabled = false;
                    cargarDatosProducto();
                    break;
                case "baja":
                    this.Page.Title = "Baja de Productos";
                    btnAceptar.Visible = true;
                    btnAceptar.Text = "Baja";
                    txtNombre.Enabled = false;
                    ddlCategoria.Enabled = false;
                    ddlMarca.Enabled = false;
                    txtPrecioUnitario.Enabled = false;
                    txtStock.Enabled = false;
                    txtTamaño.Enabled = false;
                    ddlUnidadMedida.Enabled = false;
                    calendarFechaIngreso.Enabled = false;
                    cargarDatosProducto();
                    break;
                case "cons":
                    txtNombre.Enabled = false;
                    ddlCategoria.Enabled = false;
                    ddlMarca.Enabled = false;
                    txtPrecioUnitario.Enabled = false;
                    txtStock.Enabled = false;
                    txtTamaño.Enabled = false;
                    ddlUnidadMedida.Enabled = false;
                    calendarFechaIngreso.Enabled = false;
                    cargarDatosProducto();
                    break;
            }
        }

        private void cargarDatosProducto()
        {
            try
            {
                int idProd = Convert.ToInt32(Request.QueryString["idProducto"].ToString());
                GestorProductos gp = new GestorProductos();
                Producto prod = gp.BuscarPorId(idProd);

                //cargar en el form
                txtNombre.Text = prod.Nombre;
                txtStock.Text = prod.Stock.ToString();
                txtPrecioUnitario.Text = prod.PrecioUnitario.ToString();
                txtTamaño.Text = prod.Tamanio.ToString();
                ddlUnidadMedida.SelectedValue = prod.IdUnidadMedida.ToString();
                ddlCategoria.SelectedValue = prod.IdCategoria.ToString();
                ddlMarca.SelectedValue = prod.IdMarca.ToString();
            }
            catch (Exception ex)
            {
                lblMensajeError.Text = ex.Message;
                throw;
            }

            //int idProd = Convert.ToInt32(Request.QueryString["idProducto"].ToString());
            //GestorProductos gp = new GestorProductos();
            //Producto prod = gp.BuscarPorId(idProd);

            ////cargar en el form
            //txtNombre.Text = prod.Nombre;
            //txtStock.Text = prod.Stock.ToString();
            //txtPrecioUnitario.Text = prod.PrecioUnitario.ToString();
            //txtTamaño.Text = prod.Tamanio.ToString();
            //ddlUnidadMedida.SelectedValue = prod.IdUnidadMedida.ToString();
            //ddlCategoria.SelectedValue = prod.IdCategoria.ToString();
            //ddlMarca.SelectedValue = prod.IdMarca.ToString();
        }

        private void cargarComboMarcas()
        {
            try
            {
                gMarcas = new GestorMarcas();
                ddlMarca.DataSource = gMarcas.obtenerTodasMarcas();
                ddlMarca.DataValueField = "IdMarca";
                ddlMarca.DataTextField = "Nombre";
                ddlMarca.DataBind();
                ddlMarca.Items.Insert(0, new ListItem("<Seleccione un Item>", "0"));
                if (ddlMarca.Items.Count == 0)
                {
                    ddlMarca.Items.Clear();
                    ddlMarca.DataSource = null;
                }
            }
            catch (Exception ex)
            {
                lblMensajeError.Text = ex.Message;
                //Console.Write("Error ddlMarcas" + ex.Message);
            }
        }

        private void cargarComboCategorias()
        {
            try
            {
                gCategorias = new GestorCategorias();
                ddlCategoria.DataSource = gCategorias.obtenerTodasCategorias();
                ddlCategoria.DataValueField = "IdCategoria";
                ddlCategoria.DataTextField = "Nombre";
                ddlCategoria.DataBind();
                ddlCategoria.Items.Insert(0, new ListItem("<Seleccione un Item>", "0"));
                if (ddlCategoria.Items.Count == 0)
                {
                    ddlCategoria.Items.Clear();
                    ddlCategoria.DataSource = null;
                }
            }
            catch (Exception ex)
            {
                lblResultado.Text = ex.Message;
                lblMensajeError.Text = ex.Message;
                //Console.Write("Error ddlCategorias" + ex.Message);
            }
        }

        private void cargarComboUnidadesMedida()
        {
            try
            {
                gUnidades = new GestorUnidadesMedida();
                ddlUnidadMedida.DataSource = gUnidades.obtenerTodasUnidadesMedida();
                ddlUnidadMedida.DataValueField = "IdUnidadMedida";
                ddlUnidadMedida.DataTextField = "Nombre";
                ddlUnidadMedida.DataBind();
                ddlUnidadMedida.Items.Insert(0, new ListItem("<Seleccione un Item>", "0"));
                if (ddlUnidadMedida.Items.Count == 0)
                {
                    ddlUnidadMedida.Items.Clear();
                    ddlUnidadMedida.DataSource = null;
                }
            }
            catch (Exception ex)
            {
                lblMensajeError.Text = ex.Message;
                //Console.Write("Error ddlUnidadMedida" + ex.Message);
            }
        }

        private void registrarAltaProducto()
        {
            try
            {
                Producto p = new Producto();

                if (txtNombre.Text != null)
                    p.Nombre = txtNombre.Text;
                if (ddlMarca.SelectedValue != null)
                    p.IdMarca = Convert.ToInt32(ddlMarca.SelectedValue);
                if (ddlCategoria.SelectedValue != null)
                    p.IdCategoria = Convert.ToInt32(ddlCategoria.SelectedValue);
                if (txtTamaño.Text != null)
                    p.Tamanio = (float)Convert.ToDouble(txtTamaño.Text);
                if (ddlUnidadMedida.SelectedValue != null)
                    p.IdUnidadMedida = Convert.ToInt32(ddlUnidadMedida.SelectedValue);
                if (txtPrecioUnitario.Text != null)
                    p.PrecioUnitario = (float)Convert.ToDouble(txtPrecioUnitario.Text);
                if (txtStock.Text != null)
                    p.Stock = Convert.ToInt32(txtStock.Text);
                if (calendarFechaIngreso.SelectedDate != null)
                    p.FechaIngreso = calendarFechaIngreso.SelectedDate;

                GestorProductos gp = new GestorProductos();
                int filasAfectadas = 0;
                gp.RegistrarProducto(p, out filasAfectadas);
                if (filasAfectadas > 0)
                    lblResultado.Text = "Se ha registrado exitosamente el producto";
                else
                    lblResultado.Text = "No se ha podido registrar el producto";
            }
            catch (Exception ex)
            {
                lblMensajeError.Text = ex.Message;               
            }
            //Producto p = new Producto();

            //if (txtNombre.Text != null)
            //    p.Nombre = txtNombre.Text;
            //if (ddlMarca.SelectedValue != null)
            //    p.IdMarca = Convert.ToInt32(ddlMarca.SelectedValue);
            //if (ddlCategoria.SelectedValue != null)
            //    p.IdCategoria = Convert.ToInt32(ddlCategoria.SelectedValue);
            //if (txtTamaño.Text != null)
            //    p.Tamanio = (float)Convert.ToDouble(txtTamaño.Text);
            //if (ddlUnidadMedida.SelectedValue != null)
            //    p.IdUnidadMedida = Convert.ToInt32(ddlUnidadMedida.SelectedValue);
            //if (txtPrecioUnitario.Text != null)
            //    p.PrecioUnitario = (float)Convert.ToDouble(txtPrecioUnitario.Text);
            //if (txtStock.Text != null)
            //    p.Stock = Convert.ToInt32(txtStock.Text);
            //if (calendarFechaIngreso.SelectedDate != null)
            //    p.FechaIngreso = calendarFechaIngreso.SelectedDate;

            //GestorProductos gp = new GestorProductos();
            //int filasAfectadas = 0;
            //gp.RegistrarProducto(p, out filasAfectadas);
            //if (filasAfectadas > 0)
            //    lblResultado.Text = "Se ha registrado exitosamente el producto";
            //else
            //    lblResultado.Text = "No se ha podido registrar el producto";
        }

        //revisar
        private void registrarModifProducto()
        {
            try
            {
                //revisar
                Producto p = new Producto();

                p.IdProducto = Convert.ToInt32(Request.QueryString["idProducto"].ToString());
                if (txtNombre.Text != null)
                    p.Nombre = txtNombre.Text;
                if (ddlMarca.SelectedValue != null)
                    p.IdMarca = Convert.ToInt32(ddlMarca.SelectedValue);
                if (ddlCategoria.SelectedValue != null)
                    p.IdCategoria = Convert.ToInt32(ddlCategoria.SelectedValue);
                if (txtTamaño.Text != null)
                    p.Tamanio = (float)Convert.ToDouble(txtTamaño.Text);
                if (ddlUnidadMedida.SelectedValue != null)
                    p.IdUnidadMedida = Convert.ToInt32(ddlUnidadMedida.SelectedValue);
                if (txtPrecioUnitario.Text != null)
                    p.PrecioUnitario = (float)Convert.ToDouble(txtPrecioUnitario.Text);
                if (txtStock.Text != null)
                    p.Stock = Convert.ToInt32(txtStock.Text);

                GestorProductos gp = new GestorProductos();
                int filasAfectadas = 0;
                gp.RegistrarProducto(p, out filasAfectadas);
                if (filasAfectadas > 0)
                    lblResultado.Text = "Se ha modificado exitosamente el producto";
                else
                    lblResultado.Text = "No se ha podido modificar el producto";
            }
            catch (Exception ex)
            {
                lblMensajeError.Text = ex.Message;
            }
            ////revisar
            //Producto p = new Producto();

            //p.IdProducto = Convert.ToInt32(Request.QueryString["idProducto"].ToString());
            //if (txtNombre.Text != null)
            //    p.Nombre = txtNombre.Text;
            //if (ddlMarca.SelectedValue != null)
            //    p.IdMarca = Convert.ToInt32(ddlMarca.SelectedValue);
            //if (ddlCategoria.SelectedValue != null)
            //    p.IdCategoria = Convert.ToInt32(ddlCategoria.SelectedValue);
            //if (txtTamaño.Text != null)
            //    p.Tamanio = (float)Convert.ToDouble(txtTamaño.Text);
            //if (ddlUnidadMedida.SelectedValue != null)
            //    p.IdUnidadMedida = Convert.ToInt32(ddlUnidadMedida.SelectedValue);
            //if (txtPrecioUnitario.Text != null)
            //    p.PrecioUnitario = (float)Convert.ToDouble(txtPrecioUnitario.Text);
            //if (txtStock.Text != null)
            //    p.Stock = Convert.ToInt32(txtStock.Text);

            //GestorProductos gp = new GestorProductos();
            //int filasAfectadas = 0;
            //gp.RegistrarProducto(p, out filasAfectadas);
            //if (filasAfectadas > 0)
            //    lblResultado.Text = "Se ha modificado exitosamente el producto";
            //else
            //    lblResultado.Text = "No se ha podido modificar el producto";
        }

        private void registrarBajaProducto()
        {
            try
            {
                int idProd = Convert.ToInt32(Request.QueryString["idProducto"].ToString());
                GestorProductos gp = new GestorProductos();
                int filasAfectadas = 0;
                gp.EliminarProducto(idProd, out filasAfectadas);
                if (filasAfectadas > 0)
                    lblResultado.Text = "Se ha eliminado exitosamente el producto";
                else
                    lblResultado.Text = "No se ha podido eliminado el producto";
            }
            catch (Exception ex)
            {
                lblMensajeError.Text = ex.Message;
            }
            //int idProd = Convert.ToInt32(Request.QueryString["idProducto"].ToString());
            //GestorProductos gp = new GestorProductos();
            //int filasAfectadas = 0;
            //gp.EliminarProducto(idProd, out filasAfectadas);
            //if (filasAfectadas > 0)
            //    lblResultado.Text = "Se ha eliminado exitosamente el producto";
            //else
            //    lblResultado.Text = "No se ha podido eliminado el producto";
        }

        protected void btnAceptar_Click(object sender, EventArgs e)
        {
            switch (op)
            {
                case "nuevo":
                    registrarAltaProducto();
                    break;
                case "modif":
                    registrarModifProducto();
                    break;
                case "baja":
                    registrarBajaProducto();
                    break;
                case "cons":
                    Response.Redirect("Default.aspx");
                    break;
            }
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            Response.Redirect("Default.aspx");
        }
    }
}